#ifdef PHOTONENGINEV2_EXPORTS
#define PHOTONENGINE_API __declspec(dllexport)
#else
#define PHOTONENGINE_API __declspec(dllimport)
#endif

// This engine will support more one platform.
// Eventually, this engine will go on PCs, Macs, consoles, and even mobile.
// This ifdefs will include the files needed for each system.
#ifdef _WINDOWS
#include <Windows.h>
#pragma comment(lib, "winmm.lib")

#endif

#include <iostream>
#include <fstream>
#include <string>

#include "rendererManager.h"
#include "renderOptions.h"

#define ENGINEOPTIONSFILE "photonEngineOptions.cfg"

/** 
	This class is what the programmer talks to when making the game.  Eventually, it should be pretty error-prone-less.
*/
namespace PhotonEngine {
	class Engine {
	public:
		/* Default Constructor and Destructor */
		PHOTONENGINE_API Engine(void);
		PHOTONENGINE_API ~Engine(void);
		/* Windows related Function */
#ifdef _WINDOWS
		PHOTONENGINE_API bool createWindow(WNDPROC WndProc, HINSTANCE hInstance, const char* title, int x, int y, int width, int height, HWND parentWindow);
#endif
		/* Main engine related function */
		// Start up the PhotonEngine
		PHOTONENGINE_API bool start();
		// Reshape the window
		PHOTONENGINE_API bool reshape(int x, int y, int width, int height);
		// Shut down the PhotonEngine
		PHOTONENGINE_API void shutDown();

		/* Options Related Function */
		PHOTONENGINE_API void printOptions();
		PHOTONENGINE_API void loadOptions();

		/* RenderManager Functions */
		// Render the current frame
		PHOTONENGINE_API void renderFrame();


		/* Options */
		RenderOptions renderOptions;
	private:
#ifdef _WINDOWS
		HWND engineWindow;
		HWND parentWindow;
		HINSTANCE programHInstance;
#endif

		/* Managers */
		RenderManager renderManager;
		//PhysicsManager physicsManager;
		//AnimationManager animationManager;
		//ScriptManager scriptManager;
		//AudioManager audioManager;
		//InputManager inputManager;

	protected:
	};
}